package com.atguigu.gmall.feign.product;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.product.SpuInfo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * 我将要调用远程服务
 */
@FeignClient("service-product")  //申明要调用的远程服务的名字
public interface SpuFeignClient {

    //1、 别人调用了 SpuFeignClient.spuInfoPageList
    //2、Feign先去 注册中心找 "service-product" 的所有位置
    //3、给 "service-product" 发送  @GetMapping 申明的请求 /admin/product/1/5?category3Id=61
    //4、@RequestParam 自动带到请求路径上   @PathVariable:处理请求路径的占位符
    // HttpServlegtRequest，HttpServletResponse
    @GetMapping("/admin/product/{page}/{limit}")
    Result<Page<SpuInfo>> spuInfoPageList(@RequestParam("category3Id") Long category3Id,
                                          @PathVariable("page") Long page,
                                          @PathVariable("limit") Long limit);

    /**
     * 假设远程接口，feign如何调用：
     * URL： POST  http://www.hello.com/hello?a=b&c=d
     * PARAMS：  a=b,c=d
     * BODY：
     *    {"message":"abc","haha":"def"}
     * RETURN：
     *    {"nihao":"你好","hello":"你真好"}
     * ==============================================
     * feign能不能调用c++、php写的接口。
     *  1、给http://www.hello.com/hello发送Post请求
     *  2、a,c传的参数值会作为 http://www.hello.com/hello?a=abc&c=abc
     *  3、info 传的对象会被转为json
     *  4、远程执行完成以后，feign拿到返回值  {"nihao":"你好","hello":"你真好"}
     *  5、feign 把  {"nihao":"你好","hello":"你真好"} 转成 指定的返回值类型  Map<String,Object>
     *
     */
//    @PostMapping("http://www.hello.com/hello") //HelloInfo 【messsage、haha】
//    Map<String,Object> rpcHello(@RequestParam("a") String a,
//                                @RequestParam("c") String b,
//                                @RequestBody HelloInfo info );


}
